<!DOCTYPE html>
<html>

<head>
  <title>Quarkus - Application Initialization and Termination</title>
  <script id="adobe_dtm" src="https://www.redhat.com/dtm.js" type="text/javascript"></script>
  <script src="/assets/javascript/highlight.pack.js" type="text/javascript"></script>
  <META HTTP-EQUIV='Content-Security-Policy' CONTENT="default-src 'none'; script-src 'self' 'unsafe-eval' 'sha256-ANpuoVzuSex6VhqpYgsG25OHWVA1I+F6aGU04LoI+5s=' 'sha256-ipy9P/3rZZW06mTLAR0EnXvxSNcnfSDPLDuh3kzbB1w=' js.bizographics.com https://www.redhat.com assets.adobedtm.com jsonip.com https://ajax.googleapis.com https://www.googletagmanager.com https://www.google-analytics.com https://use.fontawesome.com; style-src 'self' https://fonts.googleapis.com https://use.fontawesome.com; img-src 'self' *; media-src 'self' ; frame-src https://www.googletagmanager.com https://www.youtube.com; frame-ancestors 'none'; base-uri 'none'; object-src 'none'; form-action 'none'; font-src 'self' https://use.fontawesome.com https://fonts.gstatic.com;">
  <META HTTP-EQUIV='X-Frame-Options' CONTENT="DENY">
  <META HTTP-EQUIV='X-XSS-Protection' CONTENT="1; mode=block">
  <META HTTP-EQUIV='X-Content-Type-Options' CONTENT="nosniff">
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="Quarkus: Supersonic Subatomic Java">
  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:site" content="@QuarkusIO"> 
  <meta name="twitter:creator" content="@QuarkusIO">
  <meta property="og:url" content="https://quarkus.io/guides/lifecycle" />
  <meta property="og:title" content="Quarkus - Application Initialization and Termination" />
  <meta property="og:description" content="Quarkus: Supersonic Subatomic Java" />
  <meta property="og:image" content="/assets/images/quarkus_card.png" />
  <link rel="canonical" href="https://quarkus.io/guides/lifecycle">
  <link rel="shortcut icon" type="image/png" href="/favicon.ico" >
  <link rel="stylesheet" href="https://quarkus.io/guides/stylesheet/config.css" />
  <link rel="stylesheet" href="/assets/css/main.css" />
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
  <link rel="alternate" type="application/rss+xml"  href="https://quarkus.io/feed.xml" title="Quarkus">
  <script src="https://quarkus.io/assets/javascript/goan.js" type="text/javascript"></script>
  <script src="https://quarkus.io/assets/javascript/hl.js" type="text/javascript"></script>
</head>

<body class="guides">
  <!-- Google Tag Manager (noscript) -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NJWS5L"
  height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <!-- End Google Tag Manager (noscript) -->

  <div class="nav-wrapper">
  <div class="grid-wrapper">
    <div class="width-12-12">
      <input type="checkbox" id="checkbox" />
      <nav id="main-nav" class="main-nav">
  <div class="container">
    <div class="logo-wrapper">
      
        <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_600px_reverse.png" class="project-logo" title="Quarkus"></a>
      
    </div>
    <label class="nav-toggle" for="checkbox">
      <i class="fa fa-bars"></i>
    </label>
    <div id="menu" class="menu">
      <span>
        <a href="/get-started/" class="">Get Started</a>
      </span>
      <span>
        <a href="/guides/" class="active">Guides</a>
      </span>
      <span>
        <a href="/community/" class="">Community</a>
      </span>
      <span>
        <a href="/support/" class="">Support</a>
      </span>
      <span>
        <a href="/blog/" class="">Blog</a>
      </span>
      <span>
        <a href="https://code.quarkus.io" class="button-cta secondary white">Start Coding</a>
      </span>
    </div>
  </div>
      </nav>
    </div>
  </div>
</div>

  <div class="content">
    <div class="guide">
  <div class="width-12-12">
    <h1 class="text-caps">Quarkus - Application Initialization and Termination</h1>
    <div class="hide-mobile toc"><ul class="sectlevel1">
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#solution">Solution</a></li>
<li><a href="#creating-the-maven-project">Creating the Maven project</a></li>
<li><a href="#the-main-method">The main method</a>
<ul class="sectlevel2">
<li><a href="#injecting-the-command-line-arguments">Injecting the command line arguments</a></li>
</ul>
</li>
<li><a href="#listening-for-startup-and-shutdown-events">Listening for startup and shutdown events</a>
<ul class="sectlevel2">
<li><a href="#what-is-the-difference-from-initializedapplicationscoped-class-and-destroyedapplicationscoped-class">What is the difference from <code>@Initialized(ApplicationScoped.class)</code> and <code>@Destroyed(ApplicationScoped.class)</code></a></li>
<li><a href="#startup_annotation">Using <code>@Startup</code> to initialize a CDI bean at application startup</a></li>
</ul>
</li>
<li><a href="#package-and-run-the-application">Package and run the application</a></li>
<li><a href="#launch-modes">Launch Modes</a></li>
<li><a href="#graceful-shutdown">Graceful Shutdown</a></li>
</ul></div>
    <div>
      <div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>You often need to execute custom actions when the application starts and clean up everything when the application stops.
This guide explains how to:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Write a Quarkus application with a main method</p>
</li>
<li>
<p>Write command mode applications that run a task and then terminate</p>
</li>
<li>
<p>Be notified when the application starts</p>
</li>
<li>
<p>Be notified when the application stops</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="prerequisites"><a class="anchor" href="#prerequisites"></a>Prerequisites</h2>
<div class="sectionbody">
<div class="paragraph">
<p>To complete this guide, you need:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>less than 10 minutes</p>
</li>
<li>
<p>an IDE</p>
</li>
<li>
<p>JDK 1.8+ installed with <code>JAVA_HOME</code> configured appropriately</p>
</li>
<li>
<p>Apache Maven 3.6.2+</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="solution"><a class="anchor" href="#solution"></a>Solution</h2>
<div class="sectionbody">
<div class="paragraph">
<p>We recommend that you follow the instructions in the next sections and create the application step by step.
However, you can go right to the completed example.</p>
</div>
<div class="paragraph">
<p>Clone the Git repository: <code>git clone <a href="https://github.com/quarkusio/quarkus-quickstarts.git" class="bare">https://github.com/quarkusio/quarkus-quickstarts.git</a></code>, or download an <a href="https://github.com/quarkusio/quarkus-quickstarts/archive/master.zip">archive</a>.</p>
</div>
<div class="paragraph">
<p>The solution is located in the <code>lifecycle-quickstart</code> <a href="https://github.com/quarkusio/quarkus-quickstarts/tree/master/lifecycle-quickstart">directory</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="creating-the-maven-project"><a class="anchor" href="#creating-the-maven-project"></a>Creating the Maven project</h2>
<div class="sectionbody">
<div class="paragraph">
<p>First, we need a new project. Create a new project with the following command:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="shell" class="language-shell hljs">mvn io.quarkus:quarkus-maven-plugin:1.7.0.Final:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=lifecycle-quickstart \
    -DclassName="org.acme.lifecycle.GreetingResource" \
    -Dpath="/hello"
cd lifecycle-quickstart</code></pre>
</div>
</div>
<div class="paragraph">
<p>It generates:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>the Maven structure</p>
</li>
<li>
<p>a landing page accessible on <code><a href="http://localhost:8080" class="bare">http://localhost:8080</a></code></p>
</li>
<li>
<p>example <code>Dockerfile</code> files for both <code>native</code> and <code>jvm</code> modes</p>
</li>
<li>
<p>the application configuration file</p>
</li>
<li>
<p>an <code>org.acme.lifecycle.GreetingResource</code> resource</p>
</li>
<li>
<p>an associated test</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect1">
<h2 id="the-main-method"><a class="anchor" href="#the-main-method"></a>The main method</h2>
<div class="sectionbody">
<div class="paragraph">
<p>By default Quarkus will automatically generate a main method, that will boostrap Quarkus and then just wait for
shutdown to be initiated. Let&#8217;s provide our own main method:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="java" class="language-java hljs">package om.acme;

import io.quarkus.runtime.annotations.QuarkusMain;
import io.quarkus.runtime.Quarkus;

@QuarkusMain  <i class="conum" data-value="1"></i><b>(1)</b>
public class Main {

    public static void main(String ... args) {
        System.out.println("Running main method");
        Quarkus.run(args); <i class="conum" data-value="2"></i><b>(2)</b>
    }
}</code></pre>
</div>
</div>
<div class="colist arabic">
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
<td>This annotation tells Quarkus to use this as the main method, unless it is overridden in the config</td>
</tr>
<tr>
<td><i class="conum" data-value="2"></i><b>2</b></td>
<td>This launches Quarkus</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>This main class will bootstrap Quarkus and run it until it stops. This is no different to the automatically
generated main class, but has the advantage that you can just launch it directly from the IDE without needing
to run a Maven or Gradle command.</p>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<i class="fa icon-warning" title="Warning"></i>
</td>
<td class="content">
It is not recommenced to do any business logic in this main method, as Quarkus has not been set up yet,
and Quarkus may run in a different ClassLoader. If you want to perform logic on startup use an <code>io.quarkus.runtime.QuarkusApplication</code>
as described below.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>If we want to actually perform business logic on startup (or write applications that complete a task and then exit)
we need to supply a <code>io.quarkus.runtime.QuarkusApplication</code> class to the run method. After Quarkus has been started
the <code>run</code> method of the application will be invoked. When this method returns the Quarkus application will exit.</p>
</div>
<div class="paragraph">
<p>If you want to perform logic on startup you should call <code>Quarkus.waitForExit()</code>, this method will wait until a shutdown
is requested (either from an external signal like when you press <code>Ctrl+C</code> or because a thread has called <code>Quarkus.asyncExit()</code>).</p>
</div>
<div class="paragraph">
<p>An example of what this looks like is below:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="java" class="language-java hljs">package com.acme;

import io.quarkus.runtime.Quarkus;
import io.quarkus.runtime.QuarkusApplication;
import io.quarkus.runtime.annotations.QuarkusMain;

@QuarkusMain
public class Main {
    public static void main(String... args) {
        Quarkus.run(MyApp.class, args);
    }

    public static class MyApp implements QuarkusApplication {

        @Override
        public int run(String... args) throws Exception {
            System.out.println("Do startup logic here");
            Quarkus.waitForExit();
            return 0;
        }
    }
}</code></pre>
</div>
</div>
<div class="sect2">
<h3 id="injecting-the-command-line-arguments"><a class="anchor" href="#injecting-the-command-line-arguments"></a>Injecting the command line arguments</h3>
<div class="paragraph">
<p>It is possible to inject the arguments that were passed in on the command line:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="java" class="language-java hljs">@Inject
@CommandLineArguments
String[] args;</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="listening-for-startup-and-shutdown-events"><a class="anchor" href="#listening-for-startup-and-shutdown-events"></a>Listening for startup and shutdown events</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Create a new class named <code>AppLifecycleBean</code> (or pick another name) in the <code>org.acme.lifecycle</code> package, and copy the
following content:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="java" class="language-java hljs">package org.acme.lifecycle;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;

import io.quarkus.runtime.ShutdownEvent;
import io.quarkus.runtime.StartupEvent;
import org.jboss.logging.Logger;

@ApplicationScoped
public class AppLifecycleBean {

    private static final Logger LOGGER = Logger.getLogger("ListenerBean");

    void onStart(@Observes StartupEvent ev) {               <i class="conum" data-value="1"></i><b>(1)</b>
        LOGGER.info("The application is starting...");
    }

    void onStop(@Observes ShutdownEvent ev) {               <i class="conum" data-value="2"></i><b>(2)</b>
        LOGGER.info("The application is stopping...");
    }

}</code></pre>
</div>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Method called when the application is starting</p>
</li>
<li>
<p>Method called when the application is terminating</p>
</li>
</ol>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
The events are also called in <em>dev mode</em> between each redeployment.
</td>
</tr>
</table>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
The methods can access injected beans. Check the <a href="https://github.com/quarkusio/quarkus-quickstarts/blob/master/lifecycle-quickstart/src/main/java/org/acme/lifecycle/AppLifecycleBean.java">AppLifecycleBean.java</a> class for details.
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="what-is-the-difference-from-initializedapplicationscoped-class-and-destroyedapplicationscoped-class"><a class="anchor" href="#what-is-the-difference-from-initializedapplicationscoped-class-and-destroyedapplicationscoped-class"></a>What is the difference from <code>@Initialized(ApplicationScoped.class)</code> and <code>@Destroyed(ApplicationScoped.class)</code></h3>
<div class="paragraph">
<p>In the JVM mode, there is no real difference, except that <code>StartupEvent</code> is always fired <strong>after</strong> <code>@Initialized(ApplicationScoped.class)</code> and <code>ShutdownEvent</code> is fired <strong>before</strong> <code>@Destroyed(ApplicationScoped.class)</code>.
For a native executable build, however, <code>@Initialized(ApplicationScoped.class)</code> is fired as <strong>part of the native build process</strong>, whereas <code>StartupEvent</code> is fired when the native image is executed.
See <a href="writing-extensions#bootstrap-three-phases">Three Phases of Bootstrap and Quarkus Philosophy</a> for more details.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
In CDI applications, an event with qualifier <code>@Initialized(ApplicationScoped.class)</code> is fired when the application context is initialized. See <a href="https://docs.jboss.org/cdi/spec/2.0/cdi-spec.html#application_context" target="_blank" rel="noopener">the spec</a> for more info.
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="startup_annotation"><a class="anchor" href="#startup_annotation"></a>Using <code>@Startup</code> to initialize a CDI bean at application startup</h3>
<div class="paragraph">
<p>A bean represented by a class, producer method or field annotated with <code>@Startup</code> is initialized at application startup:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code data-lang="java" class="language-java hljs">package org.acme.lifecycle;

import javax.enterprise.context.ApplicationScoped;

@Startup <i class="conum" data-value="1"></i><b>(1)</b>
@ApplicationScoped
public class EagerAppBean {

   private final String name;

   EagerAppBean(NameGenerator generator) { <i class="conum" data-value="2"></i><b>(2)</b>
     this.name = generator.createName();
   }
}</code></pre>
</div>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>For each bean annotated with <code>@Startup</code> a synthetic observer of <code>StartupEvent</code> is generated. The default priority is used.</p>
</li>
<li>
<p>The bean constructor is called when the application starts and the resulting contextual instance is stored in the application context.</p>
</li>
</ol>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<code>@Dependent</code> beans are destroyed immediately afterwards to follow the behavior of observers declared on <code>@Dependent</code> beans.
</td>
</tr>
</table>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
If a class is annotated with <code>@Startup</code> but with no scope annotation then <code>@ApplicationScoped</code> is added automatically.
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="package-and-run-the-application"><a class="anchor" href="#package-and-run-the-application"></a>Package and run the application</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Run the application with: <code>./mvnw compile quarkus:dev</code>, the logged message is printed.
When the application is stopped, the second log message is printed.</p>
</div>
<div class="paragraph">
<p>As usual, the application can be packaged using <code>./mvnw clean package</code> and executed using the <code>-runner.jar</code> file.
You can also generate the native executable using <code>./mvnw clean package -Pnative</code>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="launch-modes"><a class="anchor" href="#launch-modes"></a>Launch Modes</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Quarkus has 3 different launch modes, <code>NORMAL</code> (i.e. production), <code>DEVELOPMENT</code> and <code>TEST</code>. If you are running <code>quarkus:dev</code>
then the mode will be <code>DEVELOPMENT</code>, if you are running a JUnit test it will be <code>TEST</code>, otherwise it will be <code>NORMAL</code>.</p>
</div>
<div class="paragraph">
<p>Your application can get the launch mode by injecting the <code>io.quarkus.runtime.LaunchMode</code> enum into a CDI bean,
or by invoking the static method <code>io.quarkus.runtime.LaunchMode.current()</code>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="graceful-shutdown"><a class="anchor" href="#graceful-shutdown"></a>Graceful Shutdown</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Quarkus includes support for graceful shutdown, this allows Quarkus to wait for running requests to finish, up
till a set timeout. By default this is disabled, however you can configure this by setting the <code>quarkus.shutdown.timeout</code>
config property. When this is set shutdown will not happen until all running requests have completed, or until
this timeout has elapsed. This config property is a duration, and can be set using the standard
<code>java.time.Duration</code> format, if only a number is specified it is interpreted as seconds.</p>
</div>
<div class="paragraph">
<p>Extensions that accept requests need to add support for this on an individual basis. At the moment only the
HTTP extension supports this, so shutdown may still happen when messaging requests are active.</p>
</div>
</div>
</div>
    </div>
  </div>
</div>

  </div>

  <div class="content project-footer">
  <div class="footer-section">
    <div class="logo-wrapper">
      <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_reverse.svg" class="project-logo" title="Quarkus"></a>
    </div>
  </div>
  <div class="grid-wrapper">
    <p class="grid__item width-3-12">Quarkus is open. All dependencies of this project are available under the <a href='https://www.apache.org/licenses/LICENSE-2.0' target='_blank'>Apache Software License 2.0</a> or compatible license.<br /><br />This website was built with <a href='https://jekyllrb.com/' target='_blank'>Jekyll</a>, is hosted on <a href='https://pages.github.com/' target='_blank'>Github Pages</a> and is completely open source. If you want to make it better, <a href='https://github.com/quarkusio/quarkusio.github.io' target='_blank'>fork the website</a> and show us what you’ve got.</p>

    
      <div class="width-1-12 project-links">
        <span>Navigation</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="/">Home</a></li>
          
            <li><a href="/guides">Guides</a></li>
          
            <li><a href="/community/#contributing">Contribute</a></li>
          
            <li><a href="/faq">FAQ</a></li>
          
            <li><a href="/get-started">Get Started</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Contribute</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://twitter.com/quarkusio">Follow us</a></li>
          
            <li><a href="https://github.com/quarkusio">GitHub</a></li>
          
            <li><a href="/security">Security&nbsp;policy</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Get Help</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://groups.google.com/forum/#!forum/quarkus-dev">Forums</a></li>
          
            <li><a href="https://quarkusio.zulipchat.com">Chatroom</a></li>
          
        </ul>
      </div>
    

    
      <div class="width-3-12 more-links">
        <span>Quarkus is made of community projects</span>
        <ul class="footer-links">
          
            <li><a href="https://vertx.io/" target="_blank">Eclipse Vert.x</a></li>
          
            <li><a href="https://microprofile.io" target="_blank">Eclipse MicroProfile</a></li>
          
            <li><a href="https://hibernate.org" target="_blank">Hibernate</a></li>
          
            <li><a href="https://netty.io" target="_blank">Netty</a></li>
          
            <li><a href="https://resteasy.github.io" target="_blank">RESTEasy</a></li>
          
            <li><a href="https://camel.apache.org" target="_blank">Apache Camel</a></li>
          
            <li><a href="https://code.quarkus.io/" target="_blank">And many more...</a></li>
          
        </ul>
      </div>
    
  </div>
</div>
  <div class="content redhat-footer">
  <div class="grid-wrapper">
    <span class="licence">
      <i class="fab fa-creative-commons"></i><i class="fab fa-creative-commons-by"></i> <a href="https://creativecommons.org/licenses/by/3.0/" target="_blank">CC by 3.0</a> | <a href="https://www.redhat.com/en/about/privacy-policy">Privacy Policy</a>
    </span>
    <span class="redhat">
      Sponsored by
    </span>
    <span class="redhat-logo">
      <a href="https://www.redhat.com/" target="_blank"><img src="/assets/images/redhat_reversed.svg"></a>
    </span>
  </div>
</div>


  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js" integrity="sha384-8gBf6Y4YYq7Jx97PIqmTwLPin4hxIzQw5aDmUg/DDhul9fFpbbLcLh3nTIIDJKhx" crossorigin="anonymous"></script>
  <script type="text/javascript" src="/assets/javascript/mobile-nav.js"></script>
  <script type="text/javascript" src="/assets/javascript/scroll-down.js"></script>
  <script src="/assets/javascript/satellite.js" type="text/javascript"></script>
  <script src="https://quarkus.io/guides/javascript/config.js" type="text/javascript"></script>
  <script src="/assets/javascript/search-filter.js" type="text/javascript"></script>
  <script src="/assets/javascript/back-to-top.js" type="text/javascript"></script>
</body>

</html>
